博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2注解实现文件下载
阅读量:4069 次
发布时间:2019-05-25

本文共 2771 字,大约阅读时间需要 9 分钟。

Struts2的配置就不讲了,重点讲下Action的写法。

DownloadAction.java:

package com.zrar.cms.action.front.suqiu.soft;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import org.apache.commons.lang.StringUtils;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import com.opensymphony.xwork2.ActionSupport;import com.zrar.cms.service.suqiu.ContentAttachService;import com.zrar.cms.suqiu2_Entity.ContentAttach;import com.zrar.cms.util.FilePathSptUtil;@Results({@Result(name = "download", type = "stream", params = {		"contentType", "application/octet-stream",		"inputName", "inputStream", "contentDisposition",		"attachment;filename=\"${downloadFileName}\"", "bufferSize",		"4096" })})public class DownloadAction extends ActionSupport {private static final long serialVersionUID = 1L;	private String attachid;//附件id	private String fileName;// 初始的通过param指定的文件名属性	private ContentAttach contentAttachs;//附件对象 	public ContentAttach getContentAttachs() {		return contentAttachs;	}	public void setContentAttachs(ContentAttach contentAttachs) {		this.contentAttachs = contentAttachs;	}	@Autowired	@Qualifier("contentAttachServiceImpl")	private ContentAttachService contenAttachService;		public String execute() throws Exception {		if(StringUtils.isNotBlank(attachid)){			contentAttachs = contenAttachService.getContentAttach(attachid);			setFileName(contentAttachs.getAttachName());		}		return "download";	}	public InputStream getInputStream() throws Exception {               // root项目上传图片路径,UPLOAD_ROOT_PATH定义为常量,从配置文件里取值               // url就是附件在服务器上对应的路径		String root = FilePathSptUtil.UPLOAD_ROOT_PATH;		String url=root+contentAttachs.getAttachUrl();		 		return new FileInputStream(new File(url));	}	public String getDownloadFileName() {		return fileName;	}	public void setFileName(String fileName) throws UnsupportedEncodingException {		String agent = ServletActionContext. getRequest().getHeader("User-agent");		//如果浏览器是IE浏览器,就得进行编码转换		if(agent.contains("MSIE")){			this.fileName = URLEncoder.encode(fileName, "UTF-8");		}else{			this.fileName = new String(fileName.getBytes(),"ISO-8859-1");  		}	}	public String getAttachid() {		return attachid;	}	public void setAttachid(String attachid) {		this.attachid = attachid;	}}

其中主要使用的参数是:

contentType 指定下载文件的文件类型 —— application/octet-stream表示无限制

inputName 流对象名 ——比如这里写inputStream,它就会自动去找Action中的getInputStream方法。

contentDisposition 使用经过转码的文件名作为下载文件名 ——默认格式是attachment;filename="${fileName}",将调用该Action中的getFileName方法。

bufferSize 下载文件的缓冲大小

 

Jsp页面调用:

">

前台页面点击效果如下:

转载地址:http://qphji.baihongyu.com/

你可能感兴趣的文章
linux怎么切换到root里面?
查看>>
linux串口操作及设置详解
查看>>
安装alien,DEB与RPM互换
查看>>
编译Android4.0源码时常见错误及解决办法
查看>>
Android 源码编译make的错误处理
查看>>
linux环境下C语言中sleep的问题
查看>>
ubuntu 12.04 安装 GMA3650驱动
查看>>
新版本的linux如何生成xorg.conf
查看>>
xorg.conf的编写
查看>>
启用SELinux时遇到的问题
查看>>
virbr0 虚拟网卡卸载方法
查看>>
No devices detected. Fatal server error: no screens found
查看>>
新版本的linux如何生成xorg.conf
查看>>
virbr0 虚拟网卡卸载方法
查看>>
Centos 6.0_x86-64 终于成功安装官方显卡驱动
查看>>
Linux基础教程:CentOS卸载KDE桌面
查看>>
db sql montior
查看>>
read humor_campus
查看>>
IBM WebSphere Commerce Analyzer
查看>>
Unix + OS IBM Aix FTP / wu-ftp / proftp
查看>>